import("//clang/utils/TableGen/clang_tablegen.gni")

clang_tablegen("Opcodes") {
  visibility = [ ":AST" ]
  args = [ "-gen-clang-opcodes" ]
  td_file = "Interp/Opcodes.td"
}

clang_tablegen("AttrDocTable") {
  visibility = [ ":AST" ]
  args = [ "-gen-clang-attr-doc-table" ]
  td_file = "//clang/include/clang/Basic/Attr.td"
}

static_library("AST") {
  output_name = "clangAST"
  configs += [ "//llvm/utils/gn/build:clang_code" ]
  deps = [
    ":AttrDocTable",
    ":Opcodes",
    "//clang/include/clang/AST:AttrImpl",
    "//clang/include/clang/AST:AttrNodeTraverse",
    "//clang/include/clang/AST:AttrTextNodeDump",
    "//clang/include/clang/AST:CommentCommandInfo",
    "//clang/include/clang/AST:CommentHTMLNamedCharacterReferences",
    "//clang/include/clang/AST:CommentHTMLTags",
    "//clang/include/clang/AST:CommentHTMLTagsProperties",
    "//clang/include/clang/AST:DeclNodes",
    "//clang/lib/Basic",
    "//clang/lib/Lex",
    "//llvm/lib/BinaryFormat",
    "//llvm/lib/Frontend/OpenMP",
    "//llvm/lib/Support",
    "//llvm/lib/TargetParser",
  ]

  # Generated files used in public headers should be in public_deps, the rest
  # in regular deps.
  public_deps = [
    "//clang/include/clang/AST:AbstractBasicReader",
    "//clang/include/clang/AST:AbstractBasicWriter",
    "//clang/include/clang/AST:AbstractTypeReader",
    "//clang/include/clang/AST:AbstractTypeWriter",
    "//clang/include/clang/AST:AttrVisitor",
    "//clang/include/clang/AST:Attrs",
    "//clang/include/clang/AST:CommentCommandList",
    "//clang/include/clang/AST:CommentNodes",
    "//clang/include/clang/AST:StmtNodes",
    "//clang/include/clang/AST:TypeNodes",
  ]
  sources = [
    "APValue.cpp",
    "ASTConcept.cpp",
    "ASTConsumer.cpp",
    "ASTContext.cpp",
    "ASTDiagnostic.cpp",
    "ASTDumper.cpp",
    "ASTImporter.cpp",
    "ASTImporterLookupTable.cpp",
    "ASTStructuralEquivalence.cpp",
    "ASTTypeTraits.cpp",
    "AttrDocTable.cpp",
    "AttrImpl.cpp",
    "CXXInheritance.cpp",
    "Comment.cpp",
    "CommentBriefParser.cpp",
    "CommentCommandTraits.cpp",
    "CommentLexer.cpp",
    "CommentParser.cpp",
    "CommentSema.cpp",
    "ComparisonCategories.cpp",
    "ComputeDependence.cpp",
    "DataCollection.cpp",
    "Decl.cpp",
    "DeclBase.cpp",
    "DeclCXX.cpp",
    "DeclFriend.cpp",
    "DeclGroup.cpp",
    "DeclObjC.cpp",
    "DeclOpenMP.cpp",
    "DeclPrinter.cpp",
    "DeclTemplate.cpp",
    "DeclarationName.cpp",
    "Expr.cpp",
    "ExprCXX.cpp",
    "ExprClassification.cpp",
    "ExprConcepts.cpp",
    "ExprConstant.cpp",
    "ExprObjC.cpp",
    "ExternalASTMerger.cpp",
    "ExternalASTSource.cpp",
    "FormatString.cpp",
    "InheritViz.cpp",
    "Interp/ByteCodeEmitter.cpp",
    "Interp/ByteCodeExprGen.cpp",
    "Interp/ByteCodeGenError.cpp",
    "Interp/ByteCodeStmtGen.cpp",
    "Interp/Context.cpp",
    "Interp/Descriptor.cpp",
    "Interp/Disasm.cpp",
    "Interp/EvalEmitter.cpp",
    "Interp/Floating.cpp",
    "Interp/Frame.cpp",
    "Interp/Function.cpp",
    "Interp/Interp.cpp",
    "Interp/InterpBlock.cpp",
    "Interp/InterpBuiltin.cpp",
    "Interp/InterpFrame.cpp",
    "Interp/InterpStack.cpp",
    "Interp/InterpState.cpp",
    "Interp/Pointer.cpp",
    "Interp/PrimType.cpp",
    "Interp/Program.cpp",
    "Interp/Record.cpp",
    "Interp/Source.cpp",
    "Interp/State.cpp",
    "ItaniumCXXABI.cpp",
    "ItaniumMangle.cpp",
    "JSONNodeDumper.cpp",
    "Mangle.cpp",
    "MicrosoftCXXABI.cpp",
    "MicrosoftMangle.cpp",
    "NSAPI.cpp",
    "NestedNameSpecifier.cpp",
    "ODRDiagsEmitter.cpp",
    "ODRHash.cpp",
    "OSLog.cpp",
    "OpenMPClause.cpp",
    "ParentMap.cpp",
    "ParentMapContext.cpp",
    "PrintfFormatString.cpp",
    "QualTypeNames.cpp",
    "Randstruct.cpp",
    "RawCommentList.cpp",
    "RecordLayout.cpp",
    "RecordLayoutBuilder.cpp",
    "ScanfFormatString.cpp",
    "SelectorLocationsKind.cpp",
    "Stmt.cpp",
    "StmtCXX.cpp",
    "StmtIterator.cpp",
    "StmtObjC.cpp",
    "StmtOpenMP.cpp",
    "StmtPrinter.cpp",
    "StmtProfile.cpp",
    "StmtViz.cpp",
    "TemplateBase.cpp",
    "TemplateName.cpp",
    "TextNodeDumper.cpp",
    "Type.cpp",
    "TypeLoc.cpp",
    "TypePrinter.cpp",
    "VTTBuilder.cpp",
    "VTableBuilder.cpp",
  ]
}
